﻿using Little.Soldier.SWIFT;
using Little.Soldier.SWIFT.Definition;
using System.ComponentModel;

namespace Little.Soldier.SWIFT.Messages.Category7
{
  public class MT734 : SwiftMessage
  {
    private static SwiftMessageDefinition MessageDefinition;
    private static SwiftTagDefinition U0002;
    private static SwiftTagSubItemDefinition U0003;
    private static SwiftTagDefinition U0004;
    private static SwiftTagSubItemDefinition U0005;
    private static SwiftTagDefinition U0006;
    private static SwiftTagSubItemDefinition U0007;
    private static SwiftTagSubItemDefinition U0008;
    private static SwiftTagSubItemDefinition U000E;
    private static SwiftTagDefinition U000F;
    private static SwiftTagChoiceDefinition U0010;
    private static SwiftTagDefinition U0011;
    private static SwiftTagSubItemDefinition U0012;
    private static SwiftTagSubItemDefinition U0013;
    private static SwiftTagSubItemDefinition U0014;
    private static SwiftTagDefinition U0015;
    private static SwiftTagSubItemDefinition U0016;
    private static SwiftTagSubItemDefinition U0017;
    private static SwiftTagChoiceDefinition U0018;
    private static SwiftTagDefinition U0019;
    private static SwiftTagSubItemDefinition U001A;
    private static SwiftTagSubItemDefinition U001B;
    private static SwiftTagDefinition U001C;
    private static SwiftTagSubItemDefinition U001D;
    private static SwiftTagSubItemDefinition U001E;
    private static SwiftTagDefinition U001F;
    private static SwiftTagSubItemDefinition U007F;
    private static SwiftTagSubItemDefinition U0080;
    private static SwiftTagDefinition U0081;
    private static SwiftTagDefinition U0082;
    private static SwiftTagDefinition U0083;

    [Description("Senders TRN")]
    public Tag20 SendersTRN_20
    {
      get
      {
        return new Tag20((SwiftElement) this, 0, (SwiftDefinitionElement) MT734.U0002);
      }
    }

    [Description("Senders TRN")]
    public Tag20 Tag20_SendersTRN
    {
      get
      {
        return this.SendersTRN_20;
      }
    }

    [Description("Presenting Banks Reference")]
    public Tag21 PresentingBanksReference_21
    {
      get
      {
        return new Tag21((SwiftElement) this, 0, (SwiftDefinitionElement) MT734.U0004);
      }
    }

    [Description("Presenting Banks Reference")]
    public Tag21 Tag21_PresentingBanksReference
    {
      get
      {
        return this.PresentingBanksReference_21;
      }
    }

    [Description("Date And Amount Of Utilisation")]
    public Tag32A DateAndAmountOfUtilisation_32A
    {
      get
      {
        return new Tag32A((SwiftElement) this, 0, (SwiftDefinitionElement) MT734.U0006);
      }
    }

    [Description("Date And Amount Of Utilisation")]
    public Tag32A Tag32A_DateAndAmountOfUtilisation
    {
      get
      {
        return this.DateAndAmountOfUtilisation_32A;
      }
    }

    [Description("Charges Claimed")]
    public Tag73 ChargesClaimed_73
    {
      get
      {
        return new Tag73((SwiftElement) this, 0, (SwiftDefinitionElement) MT734.U000F);
      }
    }

    [Description("Charges Claimed")]
    public Tag73 Tag73_ChargesClaimed
    {
      get
      {
        return this.ChargesClaimed_73;
      }
    }

    [Description("Total Amount Claimed")]
    public Tag33A TotalAmountClaimed_33A
    {
      get
      {
        return new Tag33A((SwiftElement) this, 0, (SwiftDefinitionElement) MT734.U0011);
      }
    }

    [Description("Total Amount Claimed")]
    public Tag33A Tag33A_TotalAmountClaimed
    {
      get
      {
        return this.TotalAmountClaimed_33A;
      }
    }

    [Description("Total Amount Claimed")]
    public Tag33B TotalAmountClaimed_33B
    {
      get
      {
        return new Tag33B((SwiftElement) this, 0, (SwiftDefinitionElement) MT734.U0015);
      }
    }

    [Description("Total Amount Claimed")]
    public Tag33B Tag33B_TotalAmountClaimed
    {
      get
      {
        return this.TotalAmountClaimed_33B;
      }
    }

    [Description("Account With Bank")]
    public Tag57A AccountWithBank_57A
    {
      get
      {
        return new Tag57A((SwiftElement) this, 0, (SwiftDefinitionElement) MT734.U0019);
      }
    }

    [Description("Account With Bank")]
    public Tag57A Tag57A_AccountWithBank
    {
      get
      {
        return this.AccountWithBank_57A;
      }
    }

    [Description("Account With Bank")]
    public Tag57B AccountWithBank_57B
    {
      get
      {
        return new Tag57B((SwiftElement) this, 0, (SwiftDefinitionElement) MT734.U001C);
      }
    }

    [Description("Account With Bank")]
    public Tag57B Tag57B_AccountWithBank
    {
      get
      {
        return this.AccountWithBank_57B;
      }
    }

    [Description("Account With Bank")]
    public Tag57D AccountWithBank_57D
    {
      get
      {
        return new Tag57D((SwiftElement) this, 0, (SwiftDefinitionElement) MT734.U001F);
      }
    }

    [Description("Account With Bank")]
    public Tag57D Tag57D_AccountWithBank
    {
      get
      {
        return this.AccountWithBank_57D;
      }
    }

    [Description("Sender To Receiver Information")]
    public Tag72 SenderToReceiverInformation_72
    {
      get
      {
        return new Tag72((SwiftElement) this, 0, (SwiftDefinitionElement) MT734.U0081);
      }
    }

    [Description("Sender To Receiver Information")]
    public Tag72 Tag72_SenderToReceiverInformation
    {
      get
      {
        return this.SenderToReceiverInformation_72;
      }
    }

    [Description("Discrepancies")]
    public MT734.Tag77J Discrepancies_77J
    {
      get
      {
        return new MT734.Tag77J((SwiftElement) this, 0, (SwiftDefinitionElement) MT734.U0082);
      }
    }

    [Description("Discrepancies")]
    public MT734.Tag77J Tag77J_Discrepancies
    {
      get
      {
        return this.Discrepancies_77J;
      }
    }

    [Description("Disposal of Documents")]
    public Tag77B DisposalOfDocuments_77B
    {
      get
      {
        return new Tag77B((SwiftElement) this, 0, (SwiftDefinitionElement) MT734.U0083);
      }
    }

    [Description("Disposal of Documents")]
    public Tag77B Tag77B_DisposalOfDocuments
    {
      get
      {
        return this.DisposalOfDocuments_77B;
      }
    }

    public MT734()
      : base(true)
    {
    }

    public MT734(SwiftMessage message)
      : base(message)
    {
    }

    internal override SwiftMessageDefinition MsgDefinition()
    {
      return MT734.MessageDefinition;
    }

    protected override void InitSwiftMessageDefinition()
    {
      MT734.MessageDefinition = new SwiftMessageDefinition("MT734", "Advice of Refusal");
      MT734.U0002 = new SwiftTagDefinition("SendersTRN_20", "Senders TRN");
      MT734.U0002.TagName = ":20:";
      MT734.U0003 = new SwiftTagSubItemDefinition("Reference", "Reference");
      MT734.U0002.Elements.Add((SwiftDefinitionElement) MT734.U0003);
      MT734.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT734.U0002);
      MT734.U0004 = new SwiftTagDefinition("PresentingBanksReference_21", "Presenting Banks Reference");
      MT734.U0004.TagName = ":21:";
      MT734.U0005 = new SwiftTagSubItemDefinition("Reference", "Reference");
      MT734.U0004.Elements.Add((SwiftDefinitionElement) MT734.U0005);
      MT734.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT734.U0004);
      MT734.U0006 = new SwiftTagDefinition("DateAndAmountOfUtilisation_32A", "Date And Amount Of Utilisation");
      MT734.U0006.TagName = ":32A:";
      MT734.U0007 = new SwiftTagSubItemDefinition("Date", "Date");
      MT734.U0006.Elements.Add((SwiftDefinitionElement) MT734.U0007);
      MT734.U0008 = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT734.U0006.Elements.Add((SwiftDefinitionElement) MT734.U0008);
      MT734.U000E = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT734.U0006.Elements.Add((SwiftDefinitionElement) MT734.U000E);
      MT734.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT734.U0006);
      MT734.U000F = new SwiftTagDefinition("ChargesClaimed_73", "Charges Claimed");
      MT734.U000F.TagName = ":73:";
      MT734.U000F.Mandatory = false;
      MT734.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT734.U000F);
      MT734.U0010 = new SwiftTagChoiceDefinition("Choice", "");
      MT734.U0010.Mandatory = false;
      MT734.U0010.Multiple = true;
      MT734.U0011 = new SwiftTagDefinition("TotalAmountClaimed_33A", "Total Amount Claimed");
      MT734.U0011.TagName = ":33A:";
      MT734.U0012 = new SwiftTagSubItemDefinition("Date", "Date");
      MT734.U0011.Elements.Add((SwiftDefinitionElement) MT734.U0012);
      MT734.U0013 = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT734.U0011.Elements.Add((SwiftDefinitionElement) MT734.U0013);
      MT734.U0014 = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT734.U0011.Elements.Add((SwiftDefinitionElement) MT734.U0014);
      MT734.U0010.Elements.Add((SwiftDefinitionElement) MT734.U0011);
      MT734.U0015 = new SwiftTagDefinition("TotalAmountClaimed_33B", "Total Amount Claimed");
      MT734.U0015.TagName = ":33B:";
      MT734.U0016 = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT734.U0015.Elements.Add((SwiftDefinitionElement) MT734.U0016);
      MT734.U0017 = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT734.U0015.Elements.Add((SwiftDefinitionElement) MT734.U0017);
      MT734.U0010.Elements.Add((SwiftDefinitionElement) MT734.U0015);
      MT734.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT734.U0010);
      MT734.U0018 = new SwiftTagChoiceDefinition("Choice", "");
      MT734.U0018.Mandatory = false;
      MT734.U0018.Multiple = true;
      MT734.U0019 = new SwiftTagDefinition("AccountWithBank_57A", "Account With Bank");
      MT734.U0019.TagName = ":57A:";
      MT734.U001A = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT734.U001A.Mandatory = false;
      MT734.U0019.Elements.Add((SwiftDefinitionElement) MT734.U001A);
      MT734.U001B = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT734.U0019.Elements.Add((SwiftDefinitionElement) MT734.U001B);
      MT734.U0018.Elements.Add((SwiftDefinitionElement) MT734.U0019);
      MT734.U001C = new SwiftTagDefinition("AccountWithBank_57B", "Account With Bank");
      MT734.U001C.TagName = ":57B:";
      MT734.U001D = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT734.U001D.Mandatory = false;
      MT734.U001C.Elements.Add((SwiftDefinitionElement) MT734.U001D);
      MT734.U001E = new SwiftTagSubItemDefinition("Location", "Location");
      MT734.U001E.Mandatory = false;
      MT734.U001C.Elements.Add((SwiftDefinitionElement) MT734.U001E);
      MT734.U0018.Elements.Add((SwiftDefinitionElement) MT734.U001C);
      MT734.U001F = new SwiftTagDefinition("AccountWithBank_57D", "Account With Bank");
      MT734.U001F.TagName = ":57D:";
      MT734.U007F = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT734.U007F.Mandatory = false;
      MT734.U001F.Elements.Add((SwiftDefinitionElement) MT734.U007F);
      MT734.U0080 = new SwiftTagSubItemDefinition("NameAndAddress", "Name And Address");
      MT734.U001F.Elements.Add((SwiftDefinitionElement) MT734.U0080);
      MT734.U0018.Elements.Add((SwiftDefinitionElement) MT734.U001F);
      MT734.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT734.U0018);
      MT734.U0081 = new SwiftTagDefinition("SenderToReceiverInformation_72", "Sender To Receiver Information");
      MT734.U0081.TagName = ":72:";
      MT734.U0081.Mandatory = false;
      MT734.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT734.U0081);
      MT734.U0082 = new SwiftTagDefinition("Discrepancies_77J", "Discrepancies");
      MT734.U0082.TagName = ":77J:";
      MT734.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT734.U0082);
      MT734.U0083 = new SwiftTagDefinition("DisposalOfDocuments_77B", "Disposal of Documents");
      MT734.U0083.TagName = ":77B:";
      MT734.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT734.U0083);
    }

    public class Tag77J : SwiftTagWrapper
    {
      public string Value
      {
        get
        {
          return this.GetValue();
        }
        set
        {
          this.SetValue("77J", value);
        }
      }

      internal Tag77J(SwiftElement parent, int index, SwiftDefinitionElement definition)
        : base(parent, index, definition)
      {
      }
    }
  }
}
